package gui.gui;

import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import Fiad.FIAD;

import valueobjects.Ausbilder.Ausbilder;
import valueobjects.Azubi.Azubi;
import valueobjects.Betrieb.Betrieb;
import valueobjects.Klasse.Klasse;

import gui.GuiCommands;
import gui.controller.ControllerAusbilderaenderung;
import gui.controller.ControllerAusbildererstellung;
import gui.controller.ControllerAzubiaenderung;
import gui.controller.ControllerAzubierstellung;
import gui.controller.ControllerBetrieberstellung;
import gui.gui_gen.Hauptmenue_gen;
import gui.tableModel.TableModelAusbilder;
import gui.tableModel.TableModelAzubi;
import gui.tableModel.TableModelBetrieb;

public class Hauptmenue extends Hauptmenue_gen {

	private FIAD fiad;
	private JFrame azubiErstellen;
	private JFrame azubiAenderung;
	private TableModelAzubi tmodelAzubi;
	private TableModelBetrieb tmodelBetrieb;
	private TableModelAusbilder tmodelAusbilder;
	ControllerAzubierstellung ca;
	ControllerAzubiaenderung caa;
	ControllerAusbildererstellung cae;
	ControllerAusbilderaenderung caee;

	public Hauptmenue(FIAD fiad) {
		this.fiad = fiad;
		init();
		this.setVisible(true);

		tmodelAzubi = new TableModelAzubi();
		tmodelAzubi.setListAzubi(fiad.getAlleAzubis());
		super.tblAzubi.setModel(tmodelAzubi);

		tmodelBetrieb = new TableModelBetrieb();
		tmodelBetrieb.setListBetrieb(fiad.getAlleBetriebe());
		super.tblBetrieb.setModel(tmodelBetrieb);

		tmodelAusbilder = new TableModelAusbilder();
		tmodelAusbilder.setAusbilderList(fiad.getAlleAusbilder());
		super.tblAusbilder.setModel(tmodelAusbilder);

		List<Betrieb> betriebList = fiad.getAlleBetriebe();
		for (Betrieb betrieb : betriebList) {
			cbAusbilderbetrieb.addItem(betrieb);
			cbAusbilderbetrieb.setSelectedIndex(0);
			cbBetrieb.addItem(betrieb);
		}
		List<Klasse> klasseList = fiad.getAlleKlassen();
		for (Klasse klasse : klasseList) {
			cbKlasse.addItem(klasse);
		}

	}

	public void init() {
		super.btnHinzu.setActionCommand(GuiCommands.HINZU.name());
		super.btnLoeschen.setActionCommand(GuiCommands.LOESCHEN.name());
		super.btnSucheAzubi.setActionCommand(GuiCommands.SUCHE.name());
		super.btnRefresh.setActionCommand(GuiCommands.REFRESH.name());
	}

	public void erstellung() {
		if (spAzubi.isShowing()) {
			ControllerAzubierstellung ca = new ControllerAzubierstellung(fiad);
			tmodelAzubi.setListAzubi(fiad.holeAlleAzubis());
		}
		if (spAusbilder.isShowing()) {
			ControllerAusbildererstellung cae = new ControllerAusbildererstellung(
					fiad);
			tmodelAusbilder.setAusbilderList(fiad.holeAlleAusbilder());
		}
		if (spBetrieb.isShowing()) {
			ControllerBetrieberstellung cbe = new ControllerBetrieberstellung(
					fiad);
			tmodelBetrieb.setListBetrieb(fiad.holeAlleBetriebe());
		}

	}

	public void registerActionListenerForHauptmenueButtons(
			ActionListener listener) {
		super.btnHinzu.addActionListener(listener);
		super.btnSucheAzubi.addActionListener(listener);
		super.btnLoeschen.addActionListener(listener);
		super.btnRefresh.addActionListener(listener);
	}

	public void registerMouseListener(MouseListener ml) {
		super.tblAzubi.addMouseListener(ml);
		super.tblKlasse.addMouseListener(ml);
		super.tblFach.addMouseListener(ml);
		super.tblKurs.addMouseListener(ml);
		super.tblLehrer.addMouseListener(ml);
		super.tblBetrieb.addMouseListener(ml);
		super.tblAusbilder.addMouseListener(ml);
	}

	Azubi a;
	Ausbilder aus;
	Betrieb b;

	public void loeschen() {
		if (super.tblAzubi.isShowing()) {
			int jop = JOptionPane.showConfirmDialog(null,
					"Wollen sie diesen Azubi wirklich löschen?", "Löschen?",
					JOptionPane.YES_NO_OPTION);
			if (jop == JOptionPane.YES_OPTION) {
				int tabZeile = tblAzubi.getSelectedRow();
				int modelZeile = tblAzubi.convertRowIndexToModel(tabZeile);
				a = tmodelAzubi.getSelectedModel(modelZeile);
				fiad.loescheAzubi(a);
				tmodelAzubi.setListAzubi(fiad.holeAlleAzubis());

			}
		} else if (super.tblBetrieb.isShowing()) {
			int jop = JOptionPane.showConfirmDialog(null,
					"Wollen sie diesen Betrieb wirklich löschen?", "Löschen?",
					JOptionPane.YES_NO_OPTION);
			if (jop == JOptionPane.YES_OPTION) {
				int tabZeile = tblBetrieb.getSelectedRow();
				int modelZeile = tblBetrieb.convertRowIndexToModel(tabZeile);
				b = tmodelBetrieb.getSelectedModel(modelZeile);
				fiad.loescheBetrieb(b);
				tmodelBetrieb.setListBetrieb(fiad.holeAlleBetriebe());

			}
		} else if (super.tblAusbilder.isShowing()) {
			int jop = JOptionPane.showConfirmDialog(null,
					"Wollen sie diesen Ausbilder wirklich löschen?",
					"Löschen?", JOptionPane.YES_NO_OPTION);
			if (jop == JOptionPane.YES_OPTION) {
				int tabZeile = tblAusbilder.getSelectedRow();
				int modelZeile = tblAusbilder.convertRowIndexToModel(tabZeile);
				aus = tmodelAusbilder.getSelectedModel(modelZeile);
				fiad.loescheAusbilder(aus);
				tmodelAusbilder.setAusbilderList(fiad.holeAlleAusbilder());

			}
		} else if (super.tblBetrieb.isShowing()) {
			int jop = JOptionPane.showConfirmDialog(null,
					"Wollen sie diesen Betrieb wirklich löschen?", "Löschen?",
					JOptionPane.YES_NO_OPTION);
			if (jop == JOptionPane.YES_OPTION) {
				int tabZeile = tblBetrieb.getSelectedRow();
				int modelZeile = tblBetrieb.convertRowIndexToModel(tabZeile);
				b = tmodelBetrieb.getSelectedModel(modelZeile);
				fiad.loescheBetrieb(b);
				tmodelBetrieb.setListBetrieb(fiad.holeAlleBetriebe());
			}
		}
	}

	public void uebertragen() {
		if (super.tblAzubi.isShowing()) {
			if (caa == null) {
				int tabZeile = tblAzubi.getSelectedRow();
				int modelZeile = tblAzubi.convertRowIndexToModel(tabZeile);
				a = tmodelAzubi.getSelectedModel(modelZeile);
				caa = new ControllerAzubiaenderung(a, fiad);
			} else {
				int tabZeile = tblAzubi.getSelectedRow();
				int modelZeile = tblAzubi.convertRowIndexToModel(tabZeile);
				a = tmodelAzubi.getSelectedModel(modelZeile);
				caa.showView(a);
			}

		}
		if (super.tblAusbilder.isShowing()) {
			if (caee == null) {
				int tabZeile = tblAusbilder.getSelectedRow();
				int modelZeile = tblAusbilder.convertRowIndexToModel(tabZeile);
				aus = tmodelAusbilder.getSelectedModel(modelZeile);
				caee = new ControllerAusbilderaenderung(fiad, aus);
			} else {
				int tabZeile = tblAusbilder.getSelectedRow();
				int modelZeile = tblAusbilder.convertRowIndexToModel(tabZeile);
				aus = tmodelAusbilder.getSelectedModel(modelZeile);
				caee.showView(aus);
			}
		}

	}

	public void pressSucheButton() {

	}

	public void refresh() {
		if (tblAzubi.isShowing() == true) {
			tmodelAzubi.setListAzubi(fiad.getAlleAzubis());
		}
		if (tblAusbilder.isShowing() == true) {
			tmodelAusbilder.setAusbilderList(fiad.getAlleAusbilder());
		}
		if (tblBetrieb.isShowing() == true) {
			tmodelBetrieb.setListBetrieb(fiad.getAlleBetriebe());
		}

	}
}
